﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bukstor.Biz;
using Bukstor.Admin.UI.EntidadesAdmin;
using System.Text;
using System.Data;

namespace Bukstor.Admin.UI
{
    public partial class Subcategorias : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {            
            ((Label)this.Master.FindControl("lblTitulo")).Text = "SUBCATEGORIAS";            
        }

        public List<SubcategoriasConCategorias> listarSubcategorias() 
        {
            BukstorBDEntities Entidad = new BukstorBDEntities();
            IEnumerable<Subcategoria> tablaSubcategorias = from Subcategoria S in Entidad.Subcategorias
                                                                select S;

            List<SubcategoriasConCategorias> listaCatSub = new List<SubcategoriasConCategorias>();
            foreach (Subcategoria Sub in tablaSubcategorias) {
                Sub.CategoriaReference.Load();
                //creo una subcategoria tipo subcategoriaconcategoria y le agrego las propiedades.

                SubcategoriasConCategorias nuevaSubcategoria = new SubcategoriasConCategorias();
                nuevaSubcategoria.IdSubcategoria = Sub.id;
                nuevaSubcategoria.NombreSubcategoria = Sub.nombre;
                nuevaSubcategoria.NombreCategoria = Sub.Categoria.nombre;
                nuevaSubcategoria.IdCategoria = Sub.Categoria.id;
                //Agrego a la lista la subcategoria creada.
                listaCatSub.Add(nuevaSubcategoria);
            }
            return listaCatSub;

        }          

        protected void GridView1_SelectedIndexChanged1(object sender, EventArgs e)
        {
            GridViewRow filaSubcategoria = GridView1.SelectedRow;
            txtSubcategoria.Text = HttpUtility.HtmlDecode(filaSubcategoria.Cells[2].Text);
            ddlCategorias.SelectedValue = GridView1.SelectedDataKey.Values[1].ToString();
        }

        protected void btnCrearSubcategoria_Onclick(object sender, EventArgs e)
        {
            int idSeleccionado=-1;
                            
                BukstorBDEntities Entidad = new BukstorBDEntities();                               

                //hay que obtener el idcategoria de la tabla subcategorias cuando txtSubcategoria
                //sea igual al nombre de la categoria(ddlCategorias.SelectedValue)
                string cat = ddlCategorias.SelectedValue;

                //En el enumerable debe haber un int del idcategoria seleccionado:
                IEnumerable<int> categoriasId = from Categoria C in Entidad.Categorias
                                              where cat==C.nombre select C.id ;

                foreach (int i in categoriasId) 
                {
                    idSeleccionado=i;                    
                }
                //la subcategoria a crear              
                Subcategoria nuevaSub = Subcategoria.CreateSubcategoria(0, txtSubcategoria.Text);
                
                /* Acá el error viene porque "Categoria" es nulo. No se asigna por id, sino el objeto entero
                nuevaSub.Categoria.id= idSeleccionado; */
                nuevaSub.Categoria = (from Categoria C in Entidad.Categorias where C.id == idSeleccionado select C).First();               
                                
                Entidad.AddToSubcategorias(nuevaSub);
                Entidad.SaveChanges();
                Response.Redirect("~/Subcategorias.aspx");
        }

        public void actualizarSubcategoria()
        {
            int idSeleccionado = -1; //id del ddlCategorias
            BukstorBDEntities Entidad = new BukstorBDEntities();
            int idActualizar = int.Parse(GridView1.SelectedRow.Cells[1].Text); //idSubcategoria seleccionada

            //Creo una categoria
            Subcategoria updtSubcategoria = Subcategoria.CreateSubcategoria(0, txtSubcategoria.Text);

            
            //saco el valor de la categoria seleccionada en ddlCategorias
            int cat = int.Parse(ddlCategorias.SelectedValue);

            //En el enumerable debe haber un int del idcategoria seleccionado:
            IEnumerable<int> categoriasId = from Categoria C in Entidad.Categorias
                                            where cat == C.id
                                            select C.id;

            foreach (int i in categoriasId)
            {
                idSeleccionado = i;
            }

            
            IEnumerable<Subcategoria> ieSubcategorias = from Subcategoria S in Entidad.Subcategorias                                                
                                                        select S;

            foreach (Subcategoria s in ieSubcategorias)
            {
                if (s.id == idActualizar)
                {                    
                    s.nombre = updtSubcategoria.nombre;
                    s.Categoria = (from Categoria C in Entidad.Categorias where C.id == idSeleccionado select C).First(); 
                    break;
                }
            }            
            Entidad.SaveChanges();
            Response.Redirect("~/Subcategorias.aspx");
        }
        protected void modificar_OnClick(object sender, EventArgs e)
        {
            actualizarSubcategoria();
            Response.Redirect("~/Subcategorias.aspx");
        }
    }
}